/*
 * TestHash.cpp
 *
 *  Created on: 29/10/2009
 *      Author: hernan
 */

#include "../Model/ArchivoTexto.h"
#include "../Model/ArchivoBinario.h"
#include "../Strategies/Storage/TablaEspacioLibre.h"
#include "../Strategies/Resource/ResourceStrategy.h"
#include "../Model/ArchivoTexto.h"
#include "math.h"
#include <list>
#include "../Hash/Tabladirecciones.h"
#include "../Externa/Clave.h"
#include "../Model/Bloque.h"
#include "../Model/Registro.h"
#include "../Model/BloqueHashDisco.h"
#include "../Model/StorageResource.h"
#include "../Strategies/Storage/BlockStorageStrategy.h"
#include "../Hash/TablaTamanioDisp.h"
#include "../Externa/Dato.h"
#include <vector>
#include <sstream>
#include "Alumno.h"
#include "../StorageResourceFactory.h"

using namespace std;


class TestIndiceSecuencialRegistrosFijos {

public:

	Alumno *alum;

	StorageResourceFactory *storageResourceFactory;

	StorageResource *storageResource;

public:

	void Setup () {

		string nombre = "archivoRegistros";

		storageResourceFactory = new StorageResourceFactory();
	    storageResourceFactory->createStorageRecordResource(512,nombre);
	    storageResource = storageResourceFactory->getStorageResource();

	}
	void Insercion()
	{
		 storageResource->setData(new Alumno());

		 alum=static_cast<Alumno*>(storageResource->getDato());

	     string s = "123456791";

	     alum->setDni(s);

    	 Clave clave("",storageResource->getDato());

    	 storageResource->setClave(&clave);

    	 storageResource->saveData();

	    return;
	}

	void Eliminacion()
	{
		string s= "123456790";

		storageResource->setData(new Alumno());

		alum=static_cast<Alumno*>(storageResource->getDato());
		alum->setDni(s);

		Clave clave("",storageResource->getDato());

		storageResource->setClave(&clave);

		storageResource->deleteData(&clave);

	}


	void GetData()
	{
		string s= "123456791";

		storageResource->setData(new Alumno());

		alum=static_cast<Alumno*>(storageResource->getDato());

		alum->setDni(s);

		Clave clave("",storageResource->getDato());
		storageResource->setClave(&clave);

		alum=static_cast<Alumno*> (storageResource->getData(&clave));

		cout << "Dato obtenido: " << alum->getApellido() << endl;



	}

	void UpdateData(){

		string s= "123456791";

		storageResource->setData(new Alumno());

		alum=static_cast<Alumno*>(storageResource->getDato());


		alum->setDni(s);
		alum->setApellido("Nuevo Apellido");

		Clave clave("",storageResource->getDato());
		storageResource->setClave(&clave);


		storageResource->getStorageStrategy()->updateData(storageResource->getDato(),0);


	}

	void Terminar () {
		delete storageResourceFactory;

		cout << "El test de Recurso de Completo"<< endl;
	}

	void Run() {
		Setup();
		Insercion();
		UpdateData();
		Eliminacion();
		GetData();
		Terminar();
	}


};


